package opf5.persistencia.proxies;

import opf5.entities.dominio.Inscripcion;
import opf5.entities.dominio.Jugador;
import opf5.entities.dominio.Partido;
import opf5.entities.inscripciones.InscripcionCondicional;
import opf5.entities.inscripciones.InscripcionEstandar;
import opf5.entities.inscripciones.InscripcionSolidaria;
import opf5.entities.repositorios.OPF5Factory;
import opf5.entities.repositorios.RepositorioJugadoresPersistente;
import opf5.persistencia.OPF5DBGateway;

public class InscripcionDBProxy implements Inscripcion {
	
	private Inscripcion inscripcionConcreta;
	
	private int idpartido;
	private int idinscripcion;
	
	public int getIdinscripcion() {
		return idinscripcion;
	}

	public void setIdinscripcion(int idinscripcion) {
		this.idinscripcion = idinscripcion;
	}

	public int getIdpartido() {
		return idpartido;
	}

	public void setIdpartido(int idPartido) {
		this.idpartido = idPartido;
	}


	public InscripcionDBProxy() {
		this.inscripcionConcreta = new InscripcionEstandar(null);
	}

	public InscripcionDBProxy(Inscripcion inscripcion) {
		this.inscripcionConcreta = inscripcion;
	}

	@Override
	public boolean tieneMasPrioridadQue(Inscripcion modalidad) {
		return this.inscripcionConcreta.tieneMasPrioridadQue(modalidad);
	}

	@Override
	public Jugador getJugador() {
		return this.inscripcionConcreta.getJugador();
	}

	@Override
	public void confirmarVacante(Partido partido) {
		this.inscripcionConcreta.confirmarVacante(partido);
	}

	@Override
	public Inscripcion copiar(Jugador otroJugador) {
		InscripcionDBProxy nuevaInscripcion = new InscripcionDBProxy(this.inscripcionConcreta.copiar(otroJugador));
		OPF5DBGateway.crearInscripcion(nuevaInscripcion);
		
		return nuevaInscripcion;
	}

	
	public String getNombreJugador() {
		return this.inscripcionConcreta.getJugador().getNombre();
	}
	
	public String getTipoInscripcion() {
		if (this.inscripcionConcreta.getClass().equals(InscripcionEstandar.class))
			return "Estandar";
		if (this.inscripcionConcreta.getClass().equals(InscripcionSolidaria.class))
			return "Solidaria";
		if (this.inscripcionConcreta.getClass().equals(InscripcionCondicional.class))
			return "Condicional";
		
		return "No definido";
	}

	public void setTipoInscripcion(String tipo) {
		if (tipo.equals("Estandar"))
			this.inscripcionConcreta = new InscripcionEstandar(this.inscripcionConcreta.getJugador());
		if (tipo.equals("Solidaria"))
			this.inscripcionConcreta = new InscripcionSolidaria(this.inscripcionConcreta.getJugador());
		if (tipo.equals("Condicional"))
			this.inscripcionConcreta = new InscripcionCondicional(this.inscripcionConcreta.getJugador());
	}
	
	public void setNombreJugador(String nombre) {
		this.inscripcionConcreta = this.inscripcionConcreta.copiar(
				new RepositorioJugadoresPersistente().getJugadorPorId(nombre));
	}
	
	@Override
	public String toString() {
		return this.inscripcionConcreta.toString();
	}
}
